home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Pascal Super Library
/
Pascal Super Library (CW International)(1997).bin
/
LIBRARY
/
TSPA3470
/
TSPAS.NWS
< prev
next >
Wrap
Text File
|
1994-08-16
|
35KB
|
678 lines
News on the TSPAS package by Timo Salmi in reverse order
========================================================
University of Vaasa, Finland, Sun SPARCstation IPX garbo.uwasa.fi
has a large collection of PD and shareware PC programs available by
anonymous ftp and mail server. The file /pc/ts/0news-ts contains
news about the TS-programs in the /pc/ts directory (in reverse
order). This text, which you now have, is an extract from the
0news-ts file and the UseNet news.
..................................................................
Prof. Timo Salmi Co-moderator of comp.archives.msdos.announce
Moderating at garbo.uwasa.fi anonymous FTP archives 128.214.87.1
Faculty of Accounting & Industrial Management; University of Vaasa
Internet: ts@uwasa.fi BBS +(358)-61-3170972; FIN-65101, Finland
..................................................................
┌────────────────────────────────────────────────────────────────┐
│ Appeal: Let me take up a request for those of you who may have │
│ found my programs or units useful. As I am not asking for a │
│ registration fee for private versions, would you do me a │
│ reciprocal favor by uploading at least some of my packages to, │
│ say eg one local bulletin board (BBS), and thus contribute to │
│ disseminating the *latest* versions of these packages. And, │
│ if you distribute these packages, would you PLEASE distribute │
│ an entire package, not individual programs from within any │
│ package. This is a request that all of us share who write │
│ freeware, PD and shareware programs. │
└────────────────────────────────────────────────────────────────┘
Tue 16-Aug-94: Updated my Turbo pascal units collection to be
garbo.uwasa.fi:/pc/ts/tspa34*.zip (*=40,50,55,60,70). Added to
TSUTNJ:
"OPENFLFN Is an assigned non-textfile still open or not"
TSERR (run-time error verbal listing):
Brought the error messages up to date with the TP 7.0 set.
Introduced a new unit for keyboard routines TSUNTM. In TSUNTG if
one of the routines below were called while that key is depressed
the program was suspended until the key is released. My thanks are
due to Angus March (ac_march@ECE.concordia.CA) who alterted me to
this problem. All these routines, together with the author keyboard
routines from TSUNTG have been corrected and transferred to a new
TSUNTM unit.
ALTFN Is the alt key depressed
CTRLFN Is the ctrl key depressed
LFALTFN Is the left alt key depressed
LFCTRLFN Is the left ctrl key depressed
LFSHFTFN Is the left shift key depressed
RTALTFN Is the right alt key depressed
RTCTRLFN Is the right ctrl key depressed
RTSHFTFN Is the right shift key depressed
SYSRQFN Is the SysRq key depressed
Added the following two detection routines to TSUNTG
CDROMFN Is a drive a CD-ROM with MSCDEX driver installed
MSCVERFN Get CD-ROM driver MSCDEX.EXE version
Mon 16-Aug-93: Based on some welcome feedback and on my own
observations I have released an update of my Turbo Pascal units
collection. It is now garbo.uwasa.fi:/pc/ts/tspa33*.zip where * =
40,50,55,60,70.
Added to unit TSUNTC the reversal of enabling hi-intensity
background
BLBACK "Cancel HIBACK enabling usage of blinking text"
Added to TSUNTG
ISRAMFN "Is a drive a probable ramdisk"
Corrected a bug giving occasional random results in TSUNTH
LASTDRFN "Get last drive of the system, softcoded, not XTs"
If you have used LASTDRFN, you should compile your program anew.
Added to TSUNTJ
ISDIR3FN "Is a name a directory or not", a slower and surer method
see garbo.uwasa.fi:/pc/ts/tsfaqp*.zip for details of ISDIR3FN.
Reprogrammed in TSUNTENV unit
SETENV "Set a parent environment variable (variable=value)"
It now accepts equal signs in the 'value'. I also added an example
to TSUNTENV.TST to show how to set several environment variable
values.
Moved to a new TSUNTBOT unit from TSUNTG
COLDBOOT "Reboot computer, including memory tests"
WARMBOOT "Warm reboot of the computer (as alt-ctrl-del)"
and added to this new unit
REBOOT "Reboot computer with disk closing and cache flushing"
Wed 24-Feb-93: I have updated my Turbo Pascal units collection. It
is now garbo.uwasa.fi:/pc/ts/tspa32*.zip where * = 40,50,55,60,70.
I replaced CHIPFN "Get the type of the processor chip" with
CPUFN. It should detect also a 486 while CHIPFN did not. My thanks
to Duncan Murdoch for his help in this.
The new routines added are
ISEGAFN Is at least an EGA present. No graph unit needed
NOLABEL Delete a disk's volume label.
SCROLLDN Scroll down a window. No Crt unit needed
SCROLLUP Scroll up a window. No Crt unit needed
SETLABEL Set a disk's volume label.
Sat 23-Jan-93: As all Turbo Pascal users know to our common chagrin
the different Turbo Pascal version TPUs are not compatible across
the versions. I have made a Turbo Pascal 7.0 real mode compatible
rendition of my Turbo Pascal units garbo.uwasa.fi:/pc/ts/
tspa3170.zip.
Since some users may ask, I am not going to make protected mode
nor TPW compatible versions. Protected mode programming has quirks
of it own, and is thus specialized. As for TPW, I do not use Windows
myself, and have thus no real interest of supporting it.
The other, non-updated versions are
garbo.uwasa.fi:/pc/ts/tspa3140.zip
garbo.uwasa.fi:/pc/ts/tspa3150.zip
garbo.uwasa.fi:/pc/ts/tspa3155.zip
garbo.uwasa.fi:/pc/ts/tspa3160.zip
Sun 8-Nov-92: I have again updated my Turbo Pascal units collection.
It is now garbo.uwasa.fi:/pc/ts/tspa31*.zip where * = 40,50,55,60.
The new routines added are
TSUNTB:
BBINFN Convert decimal byte to binary string
BHEXFN Convert decimal byte to hexadecimal string
TSUNTE:
ARCFILFN Is a file's archive bit set or not
HIDFILFN Is a file a hidden file or not
RDOFILFN Is a file a read-only file or not
SYSFILFN Is a file a system file or not
TSUNTG:
ACTDRVFN Which floppy drive is active on a one drive system
FLOPSTFN Floppy disk status. Is it present and formatted.
ISUBSTFN Is a drive a substituted drive (MsDos 3.1+)
MEDIAFN What kind of a disk media is present in a drive
returns: $00 : Error
$F0 : Floppy of 1.44Mb
$F8 : Fixed disk
$F9 : Floppy of 1.2Mb
$FA : Floppy of 720Kb
$FD : Floppy of 360Kb
$FF : Floppy of 320Kb
TSUNTJ
ISDIR2FN Is a name a directory or not, alternative method
Sun 20-Sep-92: In my Turbo Pascal units there is a number of
editable readln substitutes:
TSUNTF: (uses Dos, Crt)
EDRDLN Readln with line-editing potential (the simplest)
EDREABLN Edreadln with ctrl-c and break trapping
EDREADLN Editable Readln with recall, and insert toggle
I have written alternative versions of these routines which can take
a PrefillString as the default input string, so the user has an
option of just pressing enter, and default is selected.
EDRDEBLN Editable Readln with ctrl-c, break trapping, pre-fill etc
EDRDEFLN Editable Readln with recall, pre-fill, and insert toggle
The suggestion to make this enhancement came from Darrell Davis
davisd@ziavms.enmu.edu. My thanks to Darrell for his useful
suggestion.
garbo.uwasa.fi:/pc/ts/tspa3040.zip
garbo.uwasa.fi:/pc/ts/tspa3050.zip
garbo.uwasa.fi:/pc/ts/tspa3055.zip
garbo.uwasa.fi:/pc/ts/tspa3060.zip
Wed 26-Aug-92: Updated my Turbo Pascal units collection. It is now
garbo.uwasa.fi:/pc/ts/tspa29*.zip
where * = 40,50,55,60.
Bug fixed (hopefully) the ISDIRFN "Is a name a directory or not"
function in TSUNTJ unit. My thanks are due to Richard (Ricki) Breuer
ricki@rwthi3.informatik.rwth-aachen.de for alerting me to the
problem.
In the process we noticed a rather undesirable feature of DRDOS.
All my units are written for MsDos (command.com). The alternative
command interpreters like DRDOS and 4DOS can cause incompatibilities
since some of Turbo Pascal's routines (like IOResult) utilize the
values the system returns. There is nothing I can do about
incompatibilities like this, and it is a coincidence that we even
noticed, since I do not run 4DOS or DRDOS. Anyway, ISDIRFN eill not
work as expected if you are using DRDOS. I do not know about 4DOS.
SETENV "Set a parent environment variable (variable=value)" in
the TSUNTENV unit now accepts cases like TARGET=A B C (formerly the
it was cut at the spaces). Also this suggestion is to to Ricki. Be
careful. Trailing white spaces and other invisible characters you
might put in there are included. Thus "TARGET=A" and "TARGET=A " are
not the same thing.
Started a new 4.0+ specific unit TSUNTK. It contains the
following routines.
BOOTDRFN Get boot device name (MsDos 4.0+)
GETSERFN Get disk's serial number (MsDos 4.0+)
GETVOLFN Special get disk volume label (MsDos 4.0+)
SETSER Set floppy's serial number (MsDos 4.0+)
The first, that is BOOTDRFN was transferred from the TSUNTH unit.
The others are brand new. I got the idea to get and set the disk
serial number from PC-Magazine (July 1992, Vol. 11, No. 13, p. 496)
which published TP 6.0 specific code for these tasks. Since my own
TP units are more general, that is for all the current MsDos TP
versions starting from TP 4.0, I decided to write routines of my own
for these tasks. But the users interested in a source code may wish
to look at the article. (I did not bother to test whether the
PC-Magazine code works, but I don't see why not). I got interested
because I now use MsDos 5.0 in addition to 3.30 and 3.21 (and the
aggravating 4.01).
Added HEXLNGFN "Convert hexadecimal string to decimal longint up
to 7FFFFFFF" to the conversion unit TSUNTB because TSUNTK internally
needs this conversion in accessing the disk serial number.
Added to TSUNTE the following elementary routines, just because I
occasionally happen to need them myself.
LABELFN Get a disk's volume label (not for TP 4.0)
DEFDRVFN Get the default drive
Finally added HIBACK to TSUNTC to enable high intensity
background colors instead of enabling blinking text. The appropriate
interrupt was pointed out by Robert Beauchaine bobb@vice.ICO.TEK.COM
on the UseNet news in comp.lang.pascal. The routine requires an EGA,
MCGA, or a VGA.
Sat 13-Jun-92: Updated my Turbo Pascal units collection. It is now
garbo.uwasa.fi:/pc/ts/tspa28*.zip
where * = 40,50,55,60.
Added to TSUNTG unit
GETESCAN Get scancode of key pressed, enhanced keyboard.
GETSCAN Get scancode of key pressed, XT keyboard.
The TSUNTENV unit already had
SETENV Set a parent environment variable (variable=value).
but this takes effect only after the program has been completed.
Added an alternative which takes effect immediately, but is
temporary
SETENVSH Set an environment variable for the duration of shelling.
One of the handy uses of SETENVSH is that you can temporarily change
the prompt to indicate that you are shelled out of a program so that
you are less likely to forget to type exit. See TSUNTG.TST for how
to use this feature.
Sat 8-Feb-92: I have updated my Turbo Pascal units collection to be
garbo.uwasa.fi:/pc/ts/tspa2740.zip
garbo.uwasa.fi:/pc/ts/tspa2750.zip
garbo.uwasa.fi:/pc/ts/tspa2755.zip
garbo.uwasa.fi:/pc/ts/tspa2760.zip
This time I have introduced (parent) environment related routines in
a new TSUNTENV.TPU unit
ENVSIZFN Get the size of the parent environment
ENVUSEFN Get the current use of the parent environment
ENVADDFN Get the starting segment address of the parent environment
SETENV Set a parent environment variable (as MsDos SET var=value)
SHOWENV Write the parent environment table on stdout (for testing)
Setting a parent environment variable from within a Turbo Pascal
program can be considered reasonably advanced programming I guess,
and I cannot be absolutely sure that I got it right. But here goes
anyway. The key to the task is obtaining the starting address of the
parent environment, and knowing that the format of the parent
environment table in memory is
name=value1<nul>name=value2<nul>...name=valueN<nul><nul>.
PC Magazine Vol. 11, No. 1, pp. 425-427 has useful code which can be
adapted to find out the relevant segment address. Should you look at
that article, the crucial variable to get at in there is EnvSeg. The
rest then follows. What a delightfully complicated challenge.
Oh yes, since I know that some users will be asking for the
source code. I am happy to share this reference, and make my .TPU
collection publicly available, but I have chosen not to distribute
by source codes.
In fact I have not added the unit to the tspas2740.zip TP 4.0
version TPUs, but I have updated it nevertheless to avoid confusion
with the version numbers.
Mon 6-Jan-92: I have updated my Turbo Pascal units collection to be
garbo.uwasa.fi:/pc/ts/tspa2640.zip
garbo.uwasa.fi:/pc/ts/tspa2650.zip
garbo.uwasa.fi:/pc/ts/tspa2655.zip
garbo.uwasa.fi:/pc/ts/tspa2660.zip
by transferring the following routines from TSUNTH.TPU unit to a new
TSUNTJ.TPU unit
COPYFILE Copy a file from within a Turbo Pascal program
OPENEDFN Is an assigned textfile still open or not
ISDIRFN Is a name a directory or not
PIPEDIFN Is the standard input from redirection
PIPEDNFN Is the standard output redirected to nul
PIPEDOFN Is the standard output redirected
by adding the following routines to TSUNTJ.TPU
INTRADDR Show the memory address to which the interrupt points
INTRLOCA Show the memory address where the interrupt is located
and by adding the following routines to TSUNTH.TPU
ISMOUSFN A simple true/true false test of mouse available
MOUSTAFN Status (type byte) of the mouse hardware and driver
My thanks are due to Duncan Murdoch in particular who first noted a
potential error in the early version of my mouse functions.
The first of the sets garbo.uwasa.fi:/pc/ts/tspa2640.zip contains
a compatibility unit TSUNT45.TPU for Turbo Pascal 4.0. It adds
routines that the later versions have, but which are missing in
version 4.0. I have added
GetVerify Get the status of the MsDos write verify flag
SetVerify Set the status of the MsDos write verify flag
GetCBreak Get the state of Ctr-Break checking in DOS
SetCBreak Set the state of Ctr-Break checking in DOS
Sun 27-Oct-91: I have updated my Turbo Pascal units collection to be
garbo.uwasa.fi:/pc/ts/tspa2540.arc
garbo.uwasa.fi:/pc/ts/tspa2550.arc
garbo.uwasa.fi:/pc/ts/tspa2555.arc
garbo.uwasa.fi:/pc/ts/tspa2560.arc
by adding the following routines
ISANSIFN Has ansi.sys a a similar driver been loaded
BTEWRDFN Combine two bytes into a single word, inverse of Hi & Lo
WRDLNGFN Combine two words into a longint
HIWORDFN The high-order (hi) word of the longint argument
LOWORDFN The low-order (lo) word of the longint argument
Sun 21-Jul-91: I have updated my Turbo Pascal units collection to be
/pc/ts/tspa24##.arc (where ## = 40, 50, 55, and 60).
Turbo Pascal 5.0 (and later) introduced some routines which are
not present in version 4.0. My Turbo Pascal units collection (the
4.0 version) includes a TSTPU45 unit which introduces some of the
missing routines also to TP 4.0. I have added FExpand (Expand a file
name into a fully qualified file name) to this unit.
Occasionally you will want to be able to tell where the standard
input to your program comes from. Does it come in the normal way
from the keyboard, or does it come from redirection. Likewise, you
may wish your program to know whether its standard output goes to
the screen, or is it redirected to a file or through a pipe. The
new boolean functions in the TSUNTH.TPU unit will give this
information:
PIPEDIFN Is the standard input from redirection
PIPEDOFN Is the standard output redirected
PIPEDNFN Is the standard output redirected to nul
Other new routines in the TSUNTH unit include:
BOOTDRFN Get boot device name (MsDos 4.0+)
DATEFMFN Country-dependent date format (MsDos 3.0+)
NRCYLFN Number of cylinders on a drive if media present (MsDos 3.2+)
TIMEFMFN Country-dependent time format (MsDos 3.0+)
Z2ASZFN Convert an Asciiz string into an ordinary ascii string
Tue 8-Jan-91: My Turbo Pascal units collection is now available also
for Turbo Pascal 6.0. It is /pc/ts/tspa2360.arc, and is in no other
way different from tspa2340.arc, tspa2350.arc, and tspa2355.arc
except that the units are for 6.0. As you know, Turbo Pascal units
are not compatible across versions.
Sat 5-Jan-91: I have upgraded my Turbo Pascal units collection at
uwasa.fi archives by making several changes. Most importantly I have
divided the package into three parallel packages:
tspa2340.arc for Turbo Pascal 4.0 version
tspa2350.arc for Turbo Pascal 5.0 version
tspa2355.arc for Turbo Pascal 5.5 version
Thus you'll only need the package concurring with the Turbo Pascal
version you use yourself. With the exception of the differences
inherent to the different releases of Turbo Pascal, the packages are
the same.
I am expecting Turbo Pascal 6.0, but it has not arrived yet.
I have added a new unit TSERR.TPU which turn on the verbal
run-time error messages. It is very easy to use. Just include
uses TSERR;
at the beginning of your main program and you'll have verbal
run-time error messages besides the original, cryptic error codes.
I have done some cleaning of the old units by omitting some of
the older routines which have a more efficient later replacement. In
particular this concerns the functions for converting values from
one base to another.
There are also new routines:
PARSENFN Number of substrings in a string (resembles ParamCount)
PARSERFN Get substrings from a string (resembles ParamStr)
FATSFN Get number of file allocation tables, not XTs
INTERLFN Get interleave coefficient of a harddisk, not XTs
LASTDRFN Get last drive of the system, softcoded, not XTs
and the generic power function POWERGFN has been rewritten.
Wed 8-Aug-90: I have updated my Turbo Pascal (4.0, 5.0, 5.5) units
collection to be version (/pc/ts/)tspas22.arc.
There are several functions which Tubro Pascal 5.0 and 5.5 have,
but TP 4.0 does not. I have added a new unit tsunt45.tpu which
includes some of these functions such as EnvCount, EnvStr, GetEnv,
and ParamStr0 (giving the name of the program).
The unit tsunti.tpu can be used to put information into the .exe
file and perform selftests of the .exe. This unit is now also
available for TP 4.0.
Turbo Pascal ReadKey lacks the ability to read special keys such
as RightShift, LeftShift, RightCtrl, and so on. Functions to detect
pressing these keys have been added.
Turbo Pascal ReadKey also lacks the ability to cope with the full
enhanced keyboard potential. This means that TP ReadKey does not
detect pressing F11 or F12, and that it cannot distinguish between
the numeric keyboard cursor keys and the grey cursor keys. I have
added a RDENKEFN function which has these abilities.
Wed 1-Aug-90: I have updated my Turbo Pascal (4.0, 5.0, 5.5) units
collection to be version (/pc/ts/)tspas21.arc.
Turbo Pascal version 4.0 does not have the DosVersion function
available in versions 5.0 and 5.5. I have written this function for
version 4.0. Furthermore the lack of this function caused errors in
TP 4.0 versions of my last two units. This has been put right.
I have included a new unit (tsunti.tpu) for putting information
into the .exe file, and retrieving the information (not for TP 4.0).
The routines include a method for calculating the direct checksum
for a file (eg for virus checking). This is not as trivial as it may
sound at first sight, because in calculating the checksum, the
checksum constant within the program must be skipped. (Else a change
in the checksum constant would alter the checksum resulting in a
"vicious circle"). Also, the method must be fast enough.
I have also included a fast a date and filesize checking method
for detecting if the .exe has been pacthed or its size altered. (Of
course, the checksum method is much more difficult to defeat, but it
is more complicated and not as fast). Here I have made an exception
and included the source code. It is in the selftest.pas file within
tspas21.arc.
Mon 23-Jul-90: I have updated my Turbo Pascal (4.0, 5.0, 5.5) units
collection to be version (/pc/ts/)tspas20.arc.
One problem area that has intrigued me for some time is finding a
technique for storing information within an executable file and
updating that information. I've looked into it and written a couple
of relevant procedures. USECOUNT keeps track of how many times the
program has been run and stores the result within the .exe file.
BRANDEXE is a more general, but also a more complicated procedure
for .exe file handling. As an example I have a demonstration how to
tell the previous time when the program was run.
The function checking the on-line status of the printer
(prnonlfn) has been rewritten to work without Turbo Pascal's Crt
unit. And an alternative printer on-line status function, LTPONLFN,
has been added. This one should be more robust, because it actually
tries to send a carriage return to the printer, and observes the
resultant success of the operation to define the on-line status. Of
course this is achieved by {$I-} {$I+} IOResult testing, but the
real trick here is make to system respond immediately rather than in
the default response time of up to one minute. A new procedure
PRTSCR sends the current screen to the printer. The new routines
GETPRTFN and SETPRT get and set respectively the number of printer
default retry times before a timeout.
TICKSFN is a simple complement to the TIMERFN already in the
collection. TICKSFN gives the number of clock ticks (there are 18.2
per second) since midnight.
A new LASTDMFN returns the number of days in a given month and
year. DATEOKFN tells whether a date is a valid, existing date.
ZELLERFN lets you compare which of the two dates is earlier,
calculate the number of days between two dates etc.
A new FIXEDFN returns whether a drive is a fixed disk or not.
MATHCOFN returns if a math coprocessor is present. RS232FN returns
the number of serial ports. PARPORFN returns the number of parallel
ports. COUNTRFN returns the country code. CHIPFN returns the type of
the processor chip.
There are new keyboard routines. SCRLONFN gets the current
ScrollLock status. CAPS, NUMLOCK, and SCRLOCK respectively set the
CapsLock, NumLock and ScrollLock on, or off. They take the desired
status as a boolean argument.
CLS sets 25*80 text mode and clears the screen and CLS40 does
likewise for 25*40. Crt is not required.
So far none of the routines in the TSPAS collection have included
any inline code. Starting from tspas20.arc this no longer holds. I
have tried to understand some assembler and have included also
inline code. Be warned that I cannot give any guarantees that the
inline coded routines won't cause confusion. Where inline code has
been used, I have stated so. The first function to utilize this is
LOWCASFN which is the exact opposite of Turbo Pascal's own UpCase
function.
WARMBOOT simulating alt-clr-del, and COLDBOOT reboot with memory
tests are new, inline routines.
A couple of routines have been moved from one unit to another.
Newsgroups: comp.lang.pascal
From: ts@chyde.uwasa.fi (Timo Salmi)
Subject: Redirecting writes to the printer
Organization: University of Vaasa
Date: Sun, 22 Jul 90 03:58:00 GMT
(*
About half a year ago several posters wanted to find a way to direct
all output to the printer. (To enable a documentation of students'
programming tasks.) For some reason nobody of us then found a simple
working solution, which is outrageously elementary, after fact.
There are, of course, alternative solutions, the most complicated
being writing a new device driver. An intermediate (easier) solution
is to juggle with certain TP predefined constants. I have two
procedures USECON and USEPRN (in /pc/ts/tspas19.arc tpu collection)
which when placed anywhere within the program will change the output
device. But below is an example the the easiest alternative needing
no accessories.
*)
program HowToRedirectAllOutputEasilyToThePrinter;
{$DEFINE printit}
begin
{$IFDEF printit}
assign (output, 'prn');
rewrite (output);
{$ENDIF}
:
writeln ('From Timo Salmi: Hello world, and whatever else');
:
{$IFDEF printit}
close (output);
{$ENDIF}
end. (* thus endeth the escapade *)
Thu 14-Jun-90: I have updated my Turbo Pascal (4.0, 5.0, 5.5) units
collection to be version (/pc/ts/)tspas19.arc. The function INDRIVFN
in tsuntg.tpu tests whether a device is present in a drive. If you
defined an invalid drive (such as '1'), a run time error occurred in
my earlier versions. - Tsunta.tpu has a new function HIGHTFN, which
gives the height of the screen by resolution (25, 43 or 50). -
Tsuntf.tpu has a third enhanced readln with line editing, recall,
insert toggle, and clean break potential. - Tsunth.tpu includes a
new function ISDIRFNto test whether a name is a directory. -
COPYFILE procedure copies a file from within a Turbo Pascal program
and returns a success status code. I have seen postings in the
(InterNet) news about problems with copying files in Turbo Pascal,
but I hope that this one should do the trick. - OPENEDFN function
indicates whether a text file has already been closed within the
program, or if it is still open. This is particularly convenient for
procedures aborting your program. - Tsuntd includes a new procedure
called AUDIO. It is an enhanced version of Turbo Pascal's own sound
procedure. It takes frequency and duration as parameters, and it
does not need the presence of the interfering Crt unit. Audio was
written in collaboration with Ari Hovila (ajh@chyde.uwasa.fi). - And
since I am often asked the question, sorry, no, dear fellow users,
the sources are not available, only the units and their documented
interfaces.
Sun 25-Feb-90: I have gotten repeated requests from the users for a
Turbo Pascal 5.5 version of my Turbo Pascal units collection. I now
have finally got the 5.5 compiler, courtesy of University of Vaasa,
because it was felt here that this international interaction is
important enough to warrant the expense. (As I have told many of the
users who have contacted me in this matter, I am not yet interested
in OOP myself). Hence I am in a position to oblige. The new version
is called tspas18.arc. There is only one new function in the
collection this time. The main point was providing the TP 5.5
versions of the units. Thus there are now three versions of each
unit in this new release: TP 4.0, 5.5, and 5.5. - It is true that
Borland has made excellent products for the PC community, but the
incompatibility between the TPUs of the different Turbo Pascal
versions has many of us users disgruntled.
Wed 6-Dec-89: Updated the Turbo Pascal 5.0 (and 4.0) units
collection to be version /pc/ts/tspas17. The new procedures include
WHEREXFN and WHEREYFN which locate the cursor position without the
Crt unit. As you will recall Crt unit includes a WhereX and a WhereY
function. The reason I have prepared alternatives to Crt functions
and procedures in this, and the earlier releases, is because with
some incompatible PCs the Crt unit causes problems, and redirection
requires special measures with the Crt. - KEYPREFN is a replacement
of KeyPressed and READKEFN for ReadKey. - CLUSIZFN gives the cluster
size on a device. ALLSIZFN gives the true total size allocated to a
file instead of the size shown on ordinary directory listings. -
INKEYFN is a Basic-like timed input.
Tue 28-Nov-89: Some time ago there was a lively discussion in the
InterNet news group comp.lang.pascal how to redirect all write and
writeln statements to the printer without having to change the
statements. I now have a solution to that problem for Turbo Pascal
4.0 and 5.0. The procedures USEPRN and USECON are part of update
/pc/ts/tspas16.arc of my Turbo Pascal 5.0 and 4.0 units collection.
The new procedures/functions also include WEEKNRFN function in the
TSUNTE unit. It gives the weeknumber for a given date. REVCOLOR in
TSUNTC reverses (toggles) text colors. And there are many other new
routines making up a new unit TSUNTG.
Thu 26-Oct-89: I have a private mailing list for emailing these
update news. Especially, if you have my programs downloadable at
your site or your BBS you are welcome to ask for inclusion on this
list.
Wed 18-Oct-89: Released update /pc/ts/tspas15.arc of my Turbo Pascal
5.0 and 4.0 units collection. New procedures/functions include BINFN
in TSUNTB for fast conversion of decimal words to binary and HEXFN
for fast conversion to hexadecimal. LBIN and LHEX convert long
integers fast to binary and hexadecimal respectively. POWERLFN
raises a longint to a power, fast. BORDER in TSUNTE changes the
border color for CGA or VGA. All the rest of the procedures and
functions remain unchanged.
Tue 26-Sep-89: Released update /pc/ts/tspas14.arc of the Turbo
Pascal 5.0 and 4.0 units collection. The package contains units from
tsunta.tpu to tsuntf.tpu. Tsunte.tpu contains a new function
cmdlnfn, which gives the entire command line in a program call. The
input line-editing procedure edreadln in tsuntf.tpu now has a recall
option (CursorUp) and the insert key toggle. I have preserved an
edrdln procedure for line-editing without recall and insert. Tsuntd
has new ParamCount and ParamStr like functions for obtaining
substrings from a string.
Sat 19-Aug-89: Released update /pc/ts/tspas13.arc of my Turbo Pascal
units. I have rewritten the cursor-size routines in a more general
fashion and rearranged the units.
One of the weaknesses of the readln statement in (Turbo) Pascal
is that it does not allow editing the input-string while giving the
input from the keyboard. I decided to do something about this, and
wrote an edreadln procedure, which allows to use of LeftCursor,
RightCursor, BackSpace, Del, Home, End, and Esc. Of course such
routines are very common in input from popup windows. Edreadln is,
however, more of a readln-type procedure with normal scrolling
capabilities, than a fixed position window routine. This routine is
included in the new release.
Wed 2-Aug-89: I have released un updated version of the Turbo Pascal
units collection tspas12.arc. There are new string routines and
detection of the monitor (mono/color) type.
=======================================================================
Messages from UseNet news
=======================================================================
From ts Sat Jul 28 09:25:43 1990
Subject: Re: Program selftesting and viruses
To: 16012_3045@uwovax.uwo.ca (Paul Gomme)
Date: Sat, 28 Jul 90 9:25:43 EET DST
In-Reply-To: <0649102756@uwovax.uwo.ca>; from "Paul Gomme" at Jul 27, 90 6:19 pm
X-Mailer: ELM [version 2.2 PL16]
Status: OR
> > Programmers: Help fighting viruses and patching.
> >
> >Viruses and unauthorized patching are problems which should be
> >fought against by the PC community. This program demonstrates a
> >simple and a reasonably general, fast selftest to detect whether the
> >program has caught a virus, or if it has been amateurishly patched.
> >The code is easily incorporated in any Turbo Pascal source code. The
> >idea is to check whether the file date and size have been altered.
> >Most .exe viruses work by appending their code to the .exe file
> >altering the file size. Trivial patching changes the file date.
> >Either of these is detected by selftest.
>
> While the idea may have some merits, the execution is flawed.
^^^^^^
No Paul, not flawed. Rather not foolproof, nor is meant to be.
> First, it is a minor matter to obtain the creation date of a file.
> Consequently, it is a relatively simple matter to apply a patch
> which doesn't alter the file size, and restore the original creation
> date. Your technique is subject to such an "attack".
Certainly. The whole philosophy behind is to have a simple method
which staves off any crude attempts. The problem with the more
elaborate selfchecks (such as embedded checksums) is that they are
difficult to implement.
> Second, there are often good reasons to patch a file. Some of these
> reasons are cosmetic in nature. Some programs even encourage user
> patching.
Also true, and then such patching should take care of the date. Or
the selftest should have a relevant modification or omission of the
date test.
> From a more philosophical point of view, I wonder if protection
> schemes don't in part encourage those who write viruses. Surely
> part of the "thrill" is to avoid detection.
Maybe. It can be looked at as a kind of a game. Nevertheless,
consider the popularity eg McAfee's virus control programs have
gained. Throwing one's hands up in the air is not a good solution.
All the best, Timo
=======================================================================
From ts Tue Jul 31 12:07:13 1990
Return-Path: <ts>
Received: by uwasa.fi (4.1/(hh)29May89)
id AA08907; Tue, 31 Jul 90 12:07:12 +0300
From: Timo Salmi LASK <ts>
Message-Id: <9007310907.AA08907@uwasa.fi>
Subject: selftest
To: ts (Timo Salmi LASK)
Date: Tue, 31 Jul 90 12:07:11 EET DST
X-Mailer: ELM [version 2.2 PL16]
Status: O
Newsgroups: comp.lang.pascal
Path: uwasa.fi!ts
From: ts@uwasa.fi (Timo Salmi LASK)
Subject: Re: Program selftesting and viruses
Message-ID: <1990Jul31.085732.8728@uwasa.fi>
Organization: University of Vaasa
References: <1990Jul27.182520.12051@uwasa.fi> <1875@krafla.rhi.hi.is>
Date: Tue, 31 Jul 90 08:57:32 GMT
In article <1875@krafla.rhi.hi.is> frisk@rhi.hi.is (Fridrik Skulason) writes:
>This program works in most cases - however, it is not effective against some
>of the latest viruses, which fool it by making the program appear unchanged,
>after the virus is in control.
This is certainly true, and the purpose of the code is to easily
weed out elementary cases, which are the most frequent anyway. One
of the points was to make the code simple to understand and include.
The other alternative is to imbed a checksum in the .exe file. But
the code is much more complicated, because the checksum (either
direct or crc) constant itself within the program must be skipped
when recalculating the checksum. Another problem is that the
checksum must be calculated fast. Else it renders the host program
useless. I have the code also for calculating and checking the
direct checksum of an .exe file in addition to size & date check.
This should be fairly effective. This will be included in the
upcoming update of my Turbo Pascal units tspas21.arc.